iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

昨天,我們介紹了 Gitflow,並列舉了在開發推送的過程,而今天,我們終於到了整個 DevOps 的重頭戲,在背後為我們完成自動化 CI/CD 的工具 - Jenkins。

What is Jenkins

https://ithelp.ithome.com.tw/upload/images/20221006/20132878DMrySa7cVy.png

Jenkins 是基於 Java 創建的開源伺服器,並有 Web 的 GUI 可操作,既然是 Java 構建,自然能夠做到跨平台的運行,然而除了免費以外最大的優勢,是他具備超過 1800 + 的 Plugin 可以使用(剛剛看是 1867 個),藉由安裝 Plugin,我們能讓這位老先生轉身變成金剛戰士,為我們完成各種類型的任務。而學習 Jenkins 有兩個點需要特別說明一下,分別是:

  • Plugin 的管理
  • 搭建的方法

先說 Plugin 的管理,由於 Jenkins 是開源的,等於 Plugins 會出自往大的社群之手,而有些時候 Plugins 可能會有潛在的弱點 (Vulnerability),會需要留意去更新;另一方面是 Plugins 之間可能會相互影響導致執行時異常,也是有可能會遇到的坑(不過他免費)。

另外是搭建的方法,目前主流的有兩種,第一種是利用 war 的形式啟動,由於 Jenkins 是基於 Java 創建的,在執行的時候主機需要有 JDK 的環境才能夠運行,而最低的 JDK 版本要 7 以上。

既然能夠以 war 檔案啟動,則自然可以包成 container,利用拉取官方帶有 jdk 和 Jenkins 的鏡像以 container 的方式啟動,內部自行帶有 Jdk 環境,也就是第二種方法。

而藉由 Container 的方式啟動在 Kubernetes 的環境內還能達到非常優雅的分散式構建,又叫 master-worker (過往叫做 master-slave,但被正名了),運作概念是當有建構需求的時候,Jenkins Container (常駐的) 會喚醒更多的 Jenkins Container (worker) 協助任務,而 Container 能夠被分配到不同的機器(worker node)上運行,當完成後再將 Container 關閉,以達到資源的掌控。

Jenkins 在執行的時候,事實上就是在我們的 Linux 上,完成我們前幾天所做的事情,包含:

  1. Checkout: 從 Git Repository 上拉取原始碼
  2. Compile and Build: 將原始碼測試、編譯與打包(如 maven package)、構建成 Image
  3. Test: 進行測試,如 SonarQube 原始碼掃描、Ant + Apache Jmeter 自動測試
  4. Delivery: 將 Image 送往 Image Registry (Harbor)
  5. Deployment: 將 Image 部署到要執行的機器上 (實際上是由 Jenkins 遠端連線過去執行腳本)

以上的流程在日後都會是固定的,程式碼就像是水流在水管內一樣經歷了很多個步驟的接力,才完成部署,所以被稱作 Pipeline。

而要讓 Jenkins 能夠打包編譯,等於需要給予 Jenkins 一個空間存放與執行檔案(如原始碼),以前面的方法一會在 Linux 的 jenkins/workspace 資料夾內進行;若使用 Container 建構,由於容器在移除時內部的資料會跟著消失,因此還需要將容器內的資料夾映射到 Linux 機的某個資料夾上,若要讓 Jenkins 在容器內運行並啟用 docker,也需要額外映射。

Gitlab Repository 與 SourceTree 準備

明天,我們會正式安裝 Jenkins,並且安裝相關的 Plugin,然後逐步的完成 CI/CD 的步驟。而現在,就留給我一點時間先在 Gitlab 上開立三個 Repository,並將他 clone 到我的電腦上,為明天的自動化構建做好準備。

而關於 Gitlab Repository 的創見和 SourceTree clone 的步驟則不介紹,後續將從 webhook & gitflow 的建立開始介紹。

今日總結

Jenkins 是基於 Java 創建的開源伺服器,並有 Web 的 GUI 可操作
Jenkins 可以由 war 部署,亦可用 Container 部署
Jenkins 很愛 Cosplay,現在在官方網站上可以看到支持烏克蘭的 logo;另外如果操作的時候一直構建失敗或是出現錯誤時,Jenkins 會從和藹的老先生變成噴火的紅惡魔

今天快速地介紹了 Jenkins 的運作機制,而後續 Jenkins 預計會配 2 天上下來打造與解說 pipeline。


上一篇
Day20: Gitflow 介紹
下一篇
Day:22 Jenkins 安裝與基礎設置
系列文
一個人也能 DevOps ? 用 Angular + Spring Boot 演示專案由開發到部署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言